package cevent.source.cloudcenter.server.service;

import cevent.source.cloudcenter.server.domain.SiteLink;
import cevent.source.cloudcenter.server.domain.SiteLinkExample;
import cevent.source.cloudcenter.server.dto.PageDto;
import cevent.source.cloudcenter.server.dto.SiteLinkDto;
import cevent.source.cloudcenter.server.enums.LinkTypeEnum;
import cevent.source.cloudcenter.server.mapper.SiteLinkMapper;
import cevent.source.cloudcenter.server.util.DuplicateUtil;
import cevent.source.cloudcenter.server.util.UUID8Util;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author cevent
 * @description 友情链接表服务层
 */
@Service
public class SiteLinkService {
    private static final Logger LOG=LoggerFactory.getLogger(SiteLinkService.class);
    @Resource
    private SiteLinkMapper siteLinkMapper;

    //1.无分页列表查询：dto获取domain参数
    public List<SiteLinkDto> siteLinkDtoList(){
        SiteLinkExample siteLinkExample = new SiteLinkExample();
        siteLinkExample.setOrderByClause("sort asc");
        List<SiteLink> siteLinkList=siteLinkMapper.selectByExample(siteLinkExample);
        List<SiteLinkDto> siteLinkDtoList = new ArrayList<SiteLinkDto>();
        for(int i=0;i<siteLinkList.size();i++){
            SiteLink siteLink=siteLinkList.get(i);
            SiteLinkDto siteLinkDto=new SiteLinkDto();
            //复制拷贝(source,target)
            BeanUtils.copyProperties(siteLink,siteLinkDto);
            siteLinkDtoList.add(siteLinkDto);
        }
        return siteLinkDtoList;
    }

    /*2.分页查询：pageDto保存数据
        list数据集合：listPageData
        当前页码：currentPage
        每页行数：size
        总计函数：totalSize
        前端可返回pageDto，无需返回值
     */
    public void getSiteLinkPageDtoList(PageDto pageDto){
        //1.分页设置（前端传入当前页和每页行数params），起始页，每页行数size
        PageHelper.startPage(pageDto.getCurrentPage(),pageDto.getSize());

        SiteLinkExample siteLinkExample=new SiteLinkExample();
        SiteLinkExample.Criteria criteria=siteLinkExample.createCriteria();
        siteLinkExample.setOrderByClause("sort asc");
        List<SiteLink> siteLinkList=siteLinkMapper.selectByExample(siteLinkExample);
        //2.将mapper查询结果复制到pageInfo
        PageInfo<SiteLink> pageInfo=new PageInfo<>(siteLinkList);
        //3.pageInfo计算处理处理=>后分页的总行数set到pageDto做记录
        pageDto.setTotalSize(pageInfo.getTotal());

        List<SiteLinkDto> siteLinkDtoList=new ArrayList<>();
        siteLinkList.stream().forEach(siteLink->{
            SiteLinkDto siteLinkDto=new SiteLinkDto();
            BeanUtils.copyProperties(siteLink,siteLinkDto);
            siteLinkDtoList.add(siteLinkDto);
        });

        pageDto.setListPageData(siteLinkDtoList);

    }

    //3.新增、修改siteLink，将传入的id转为siteLink对象本身
    public void save(SiteLinkDto siteLinkDto){
        SiteLink siteLink= DuplicateUtil.copy(siteLinkDto,SiteLink.class);
        if(StringUtils.isEmpty(siteLinkDto.getUniId())){
            this.insert(siteLink);
            if(StringUtils.isEmpty(siteLinkDto.getLinkType())){
               siteLinkDto.setLinkType(LinkTypeEnum.COOPERATION.getCode());
            }
        }else{
            this.update(siteLink);
        }

    }

    //4.删除模块
    public void delete(String uniId){
        SiteLinkExample siteLinkExample=new SiteLinkExample();
        siteLinkMapper.deleteByPrimaryKey(uniId);
    }

    //5.向外暴露dto，不暴露实体类：插入数据
    private void insert(SiteLink siteLink){
        siteLink.setUniId(UUID8Util.getShortUUID());

        try {
        Date now =new Date();
        String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
        long time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
        int timeInt=(int)(time/1000);
        siteLink.setCreateTime(now);
        siteLink.setUpdateTime(now);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        siteLinkMapper.insert(siteLink);
    }

    //6.更新模块
    private void update(SiteLink siteLink){
        try {
            Date now =new Date();
            String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now);
            long time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date).getTime();
            int timeInt=(int)(time/1000);

            siteLink.setUpdateTime(now);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        siteLinkMapper.updateByPrimaryKey(siteLink);
    }

}
